package _11_位运算;

// 两数相互除
// (被除数 - 余数) / 除数 = 商
// 商 * 除数 + 余数 = 被除数
public class _29_两数相除 {

    public static void main(String[] args) {

        _29_两数相除 v = new _29_两数相除();
        System.out.println(v.divide(Integer.MIN_VALUE, 1));
    }

    public int divide(int dividend, int divisor) {
        if (dividend == 0) return 0;
        if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;
        boolean negative = (dividend ^ divisor) < 0;
        long d = Math.abs((long) dividend);
        long t = Math.abs((long) divisor);
        // 是否符号向异
        int result = 0;
        for (int i = 31; i >= 0; i--) {
            if ((d >> i) >= t) {
                result += 1 << i;
                d -= t << i;
            }
        }
        return negative? -result: result;
    }

}
